package com.my.screenadapter.eventBus;

import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.my.screenadapter.Base.BaseActivity;
import com.my.screenadapter.R;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

import butterknife.BindView;
import butterknife.OnClick;

/**
 * 结论
 *
 * 接受event Thread.sleep 会影响 当前event的接受，直到处理完，才开始接收下一个。
 */
public class EventbusActivity extends BaseActivity {

    @BindView(R.id.et)
    EditText et;
    @BindView(R.id.send_event)
    Button sendEvent;

    @Override
    protected void init() {

    }

    @Override
    protected int initLayoutId() {
        return R.layout.activity_eventbus;
    }

    /**
     * POSTING (默认) 表示事件处理函数的线程跟发布事件的线程在同一个线程。
     * MAIN 表示事件处理函数的线程在主线程(UI)线程，因此在这里不能进行耗时操作。
     * BACKGROUND 表示事件处理函数的线程在后台线程，因此不能进行UI操作。如果发布事件的线程是主线程(UI线程)，那么事件处理函数将会开启一个后台线程，如果果发布事件的线程是在后台线程，那么事件处理函数就使用该线程。
     * ASYNC 表示无论事件发布的线程是哪一个，事件处理函数始终会新建一个子线程运行，同样不能进行UI操作。
     */
    @Subscribe(threadMode = ThreadMode.BACKGROUND)
    public void receive(EventBusEvent eventBusEvent) {

        Log.i(TAG, "receive: 11111 msg==" + eventBusEvent.getMsg()+"  code=="+eventBusEvent.getCode());
        switch (eventBusEvent.getCode()){
            case EventBusEvent.success:
                Log.i(TAG, "receive: 11111  success");
                break;
            case EventBusEvent.error:
                try {
                    Thread.sleep(1000*10);
                    Log.i(TAG, "receive: 11111  error");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                break;
        }
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void receive2(EventBusEvent eventBusEvent) {//多个地方都可以接受
        Log.i(TAG, "receive: 22222  msg==" + eventBusEvent.getMsg());
        Toast.makeText(mContext, "receive: 22222" + eventBusEvent.getMsg(), Toast.LENGTH_SHORT).show();

    }

    @OnClick(R.id.send_event)
    public void sendEvent(View v) {
        EventBusEvent eventBusEvent = new EventBusEvent();
        eventBusEvent.setMsg("消息==" + et.getText().toString().trim());
        EventBus.getDefault().post(eventBusEvent);
    }

    int num;
    @OnClick(R.id.send_event2)
    public void sendEvent2(View v) {
        EventBusEvent eventBusEvent = new EventBusEvent();
        eventBusEvent.setMsg("消息==" + et.getText().toString().trim()+num);
        eventBusEvent.setCode(num%2);
        EventBus.getDefault().post(eventBusEvent);
        num++;
    }

    @Override
    protected void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
    }

    @Override
    public void onStop() {
        super.onStop();
        EventBus.getDefault().unregister(this);
    }
}
